Odeslani udalosti

Otázka od: Radek Szurman

15. 4. 2004 8:41

Cau, nevite nekdo jak predat udalosti kliku a pohybu mysi objektu ktery pod
Image1 ? tj. kdyz kliknu na misto v pruhlednem image1 kde je pod nim Label1
aby se provedla jeho udalost onMouseDown...

Radek Szurman

Odpovedá: Bronislav Klucka

15. 4. 2004 9:15

procedure TForm1.Image1MouseDown;
begin
  Label1MouseDown(Label1);
end;


to by mohlo pomoci  

Brona

> Cau, nevite nekdo jak predat udalosti kliku a pohybu mysi objektu ktery
> pod Image1 ? tj. kdyz kliknu na misto v pruhlednem image1 kde je pod
> nim Label1 aby se provedla jeho udalost onMouseDown...
>
> Radek Szurman



Odpovedá: Radek Szurman

15. 4. 2004 9:13

Jo, napad je to dobry, ale neni to uplne ono protoze problem je ze ten
label1 je tvoren dynamicky a bylo by to hodne komplikovanejsi (neznam jeho
nazev, misto...), potreboval bych neco jako transparentni udalosti, nebo
neco na co muzu kreslit a neslo to prekryt jinym objektem ale udalosti by
zustaly jako kdyby tam nic nebylo.

Radek Szurman


> procedure TForm1.Image1MouseDown;
> begin
> Label1MouseDown(Label1);
> end;
>
>
> to by mohlo pomoci  
>
> Brona
>
> > Cau, nevite nekdo jak predat udalosti kliku a pohybu mysi objektu ktery
> > pod Image1 ? tj. kdyz kliknu na misto v pruhlednem image1 kde je pod
> > nim Label1 aby se provedla jeho udalost onMouseDown...
> >
> > Radek Szurman


Odpovedá: Bronislav Klucka

15. 4. 2004 9:57

1/
type
  TForm1
    procedure FormCreate(Sender:TObject);
  protected
    Label:TLabel;
    procedure MyOnLabelClick(Sender:TObject);
  end;

implementation

procedure FormCreate(Sender:TObject);
begin
  Label:=TLabel.Create(Self);
  InsertControl(label);
  Label.OnClick:=MyOnLabelClick;
end;

P.S. s tim "neco, co by tam bylo, jako by to tam nebylo" bud kontretnejsi.
POpis svuj problem, abych Ti mohl lepe poradit
Brona


> Jo, napad je to dobry, ale neni to uplne ono protoze problem je ze ten
> label1 je tvoren dynamicky a bylo by to hodne komplikovanejsi (neznam
> jeho nazev, misto...), potreboval bych neco jako transparentni
> udalosti, nebo neco na co muzu kreslit a neslo to prekryt jinym
> objektem ale udalosti by zustaly jako kdyby tam nic nebylo.
>
> Radek Szurman
>
>
>> procedure TForm1.Image1MouseDown;
>> begin
>> Label1MouseDown(Label1);
>> end;
>>
>>
>> to by mohlo pomoci  
>>
>> Brona
>>
>> > Cau, nevite nekdo jak predat udalosti kliku a pohybu mysi objektu
>> > ktery pod Image1 ? tj. kdyz kliknu na misto v pruhlednem image1 kde
>> > je pod nim Label1 aby se provedla jeho udalost onMouseDown...
>> >
>> > Radek Szurman



Odpovedá: Radek Szurman

15. 4. 2004 10:14

Tedy aby to bylo jasnejsi, mam graficky program kde se vytvareji komponenty
na formulari dynamicky (jsou tam vrstvy..neco jako photoshop), je jich tam
vice a kdyz na objekt kliknu oznaci se, presouvam ho, upravuju... ale
potreboval bych jeste nakreslit 2x kruh nad nimi (presah pri tisku),
umistim-li nad ne image tak pak snimi nic neudelam. Tvoje reseni je supr ale
pouze pro jeden objekt pod image jestli ho dobre chapu. Myslel jsem ze bo to
mohlo udelat nejake odchyceni udalosti na image1 a odeslat pod nej, nevim
ale jestli to je vibec technicky mozne...

Radek Szurman

> 1/
> type
> TForm1
> procedure FormCreate(Sender:TObject);
> protected
> Label:TLabel;
> procedure MyOnLabelClick(Sender:TObject);
> end;
>
> implementation
>
> procedure FormCreate(Sender:TObject);
> begin
> Label:=TLabel.Create(Self);
> InsertControl(label);
> Label.OnClick:=MyOnLabelClick;
> end;
>
> P.S. s tim "neco, co by tam bylo, jako by to tam nebylo" bud kontretnejsi.
> POpis svuj problem, abych Ti mohl lepe poradit
> Brona
>
>
> > Jo, napad je to dobry, ale neni to uplne ono protoze problem je ze ten
> > label1 je tvoren dynamicky a bylo by to hodne komplikovanejsi (neznam
> > jeho nazev, misto...), potreboval bych neco jako transparentni
> > udalosti, nebo neco na co muzu kreslit a neslo to prekryt jinym
> > objektem ale udalosti by zustaly jako kdyby tam nic nebylo.
> >
> > Radek Szurman
> >
> >
> >> procedure TForm1.Image1MouseDown;
> >> begin
> >> Label1MouseDown(Label1);
> >> end;
> >>
> >>
> >> to by mohlo pomoci  
> >>
> >> Brona
> >>
> >> > Cau, nevite nekdo jak predat udalosti kliku a pohybu mysi objektu
> >> > ktery pod Image1 ? tj. kdyz kliknu na misto v pruhlednem image1 kde
> >> > je pod nim Label1 aby se provedla jeho udalost onMouseDown...
> >> >
> >> > Radek Szurman
>
>
>
>
>
>


Odpovedá: Bronislav Klucka

15. 4. 2004 13:55

No, myslim, ze pozice jednotlivych prvku na formulari znas, kam si klik
mysi na formular take zjistis, co ti potom brani zjistit, ktera komponenta
lezi na miste kliknuti? velmi zjednodusene asi takto:
bytvoris obecnou methodu pro event kliku (napr.)
procedure OnComponentClick(Sender:TObject);
tuto methodu priradis kaznemu prvku, ktery vytvoris, (viz. nize), i tomu
image. na OnClick zjistis, zda si to sama komponenta (Label) osetri, nebo
to je image a zjistis, kam si klikl a lezi pod nim zjistis, zjistis, co
tam lezi za komponentu (napr. button3) a zavolas:
ProvedComponentClick(Button3);

Tzn:podrobneji (nemam ted u sebe delphi, takze spousta method se bude
jenovat jinak, ale snad Ti bude jasne, co tim chci rici).
 type
   TForm1
     procedure VytvorLabelButtonClick(Sender:TObject);
     procedure VytvorImageButtonClick(Sender:TObject);
   protected
     Label:TLabel;
     procedure MyOnLabelClick(Sender:TObject);
     function
     CoLeziPodemnou(Komponenta:TComponent;MysX,MysY:integer):TComponent; end;

 implementation

 procedure TForm1.VytvorLabelButtonClick(Sender:TObject);
 var Label:TLabel;
 begin
   Label:=TLabel.Create(Self);
   InsertControl(label);
   Label.OnClick:=MyOnLabelClick;
 end;

 procedure TForm1.VytvorImageButtonClick(Sender:TObject);
 var image:TImage;
 begin
   image:=TImage.Create(Self);
   InsertControl(image);
   image.OnClick:=MyOnLabelClick;
 end;

 procedure TForm1.MyOnLabelClick(Sender:TObject);
 var komponenta:TComponent;
 begin
   if (Sender is TImage) then
   komponenta:=CoLeziPodemnou(TComponent(Sender),Mouse.X,Mouse.Y) else
komponenta:=TComponent(Sender);
   MyOnLabelClick(komponenta);
 end;

 function
 TForm1.CoLeziPodemnou(Komponenta:TComponent;MysX,MysY:integer):TComponent;
begin
   {pomoci fce MouseToScreen, nebo ClientToStreen, nebo tak nejak prevadis
   pozice krysy na nejake lepe pouzitelne hodnoty} end;

 procedure TForm1.MyOnLabelClick(Sender:TObject);
  var komponenta:TComponent;
 begin
   komponenta:=TComponent(Sender);
   Komponenta.color:=clWhite;
  ....
 end;



Trosku si s tim samozrejme jeste pohraj : . Snad jsem alespon trosku
pomohl. A hodilo by se pred pretypovanim se pro jistotu ujistit, zda jsou
skutecne parametry daneho typu.

Brona


> Tedy aby to bylo jasnejsi, mam graficky program kde se vytvareji
> komponenty na formulari dynamicky (jsou tam vrstvy..neco jako
> photoshop), je jich tam vice a kdyz na objekt kliknu oznaci se,
> presouvam ho, upravuju... ale potreboval bych jeste nakreslit 2x kruh
> nad nimi (presah pri tisku), umistim-li nad ne image tak pak snimi nic
> neudelam. Tvoje reseni je supr ale pouze pro jeden objekt pod image
> jestli ho dobre chapu. Myslel jsem ze bo to mohlo udelat nejake
> odchyceni udalosti na image1 a odeslat pod nej, nevim ale jestli to je
> vibec technicky mozne...
>
> Radek Szurman
>
>> 1/
>> type
>> TForm1
>> procedure FormCreate(Sender:TObject);
>> protected
>> Label:TLabel;
>> procedure MyOnLabelClick(Sender:TObject);
>> end;
>>
>> implementation
>>
>> procedure FormCreate(Sender:TObject);
>> begin
>> Label:=TLabel.Create(Self);
>> InsertControl(label);
>> Label.OnClick:=MyOnLabelClick;
>> end;
>>
>> P.S. s tim "neco, co by tam bylo, jako by to tam nebylo" bud
>> kontretnejsi. POpis svuj problem, abych Ti mohl lepe poradit
>> Brona
>>
>>
>> > Jo, napad je to dobry, ale neni to uplne ono protoze problem je ze
>> > ten label1 je tvoren dynamicky a bylo by to hodne komplikovanejsi
>> > (neznam jeho nazev, misto...), potreboval bych neco jako
>> > transparentni udalosti, nebo neco na co muzu kreslit a neslo to
>> > prekryt jinym objektem ale udalosti by zustaly jako kdyby tam nic
>> > nebylo.
>> >
>> > Radek Szurman
>> >
>> >
>> >> procedure TForm1.Image1MouseDown;
>> >> begin
>> >> Label1MouseDown(Label1);
>> >> end;
>> >>
>> >>
>> >> to by mohlo pomoci  
>> >>
>> >> Brona
>> >>
>> >> > Cau, nevite nekdo jak predat udalosti kliku a pohybu mysi objektu
>> >> > ktery pod Image1 ? tj. kdyz kliknu na misto v pruhlednem image1
>> >> > kde je pod nim Label1 aby se provedla jeho udalost onMouseDown...
>> >> >
>> >> > Radek Szurman



Odpovedá: Bronislav Klucka

15. 4. 2004 14:19

Oprava kodu z meho 3. mailu



 type
   TForm1
     procedure VytvorLabelButtonClick(Sender:TObject);
     procedure VytvorImageButtonClick(Sender:TObject);
   protected
     procedure MyOnLabelClick(Sender:TObject);
     function
     CoLeziPodemnou(Komponenta:TComponent;MysX,MysY:integer):TComponent;
     procedure ProvedComponentClick(komponenta:TComponent);
end;

 implementation

 procedure TForm1.VytvorLabelButtonClick(Sender:TObject);
 var Label:TLabel;
 begin
   Label:=TLabel.Create(Self);
   InsertControl(label);
   Label.OnClick:=MyOnLabelClick;
 end;

 procedure TForm1.VytvorImageButtonClick(Sender:TObject);
 var image:TImage;
 begin
   image:=TImage.Create(Self);
   InsertControl(image);
   image.OnClick:=MyOnLabelClick;
 end;

 procedure TForm1.MyOnLabelClick(Sender:TObject);
 var komponenta:TComponent;
 begin
   if (Sender is TImage) then
   komponenta:=CoLeziPodemnou(TComponent(Sender),Mouse.X,Mouse.Y) else
   komponenta:=TComponent(Sender);
   ProvedComponentClick(komponenta);
 end;

 function
 TForm1.CoLeziPodemnou(Komponenta:TComponent;MysX,MysY:integer):TComponent;
 begin {pomoci fce MouseToScreen, nebo ClientToStreen, nebo tak nejak
prevadis
   pozice krysy na nejake lepe pouzitelne hodnoty} end;

 procedure TForm1.ProvedComponentClick(komponenta:TComponent);
 begin
   Komponenta.color:=clWhite;
  ....
 end;